package com.party.core.service.member.impl;

import com.google.common.base.Strings;
import com.party.common.paging.Page;
import com.party.common.utils.UUIDUtils;
import com.party.core.dao.read.member.MemberExternalAppReadDao;
import com.party.core.dao.write.member.MemberExternalAppWriteDao;
import com.party.core.model.member.MemberExternalApp;
import com.party.core.service.member.IMemberExternalAppService;
import com.sun.istack.NotNull;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Set;

/**
 * 会员第三方应用服务实现
 * Created by wei.li.
 *
 * @date 2017/12/8 0008
 * @time 10:29
 */

@Service
public class MemberExternalAppService implements IMemberExternalAppService {

    @Autowired
    private MemberExternalAppReadDao memberExternalAppReadDao;

    @Autowired
    private MemberExternalAppWriteDao memberExternalAppWriteDao;

    /**
     * 新增
     * @param memberExternalApp 会员第三方应用
     * @return 编号
     */
    @Override
    public String insert(MemberExternalApp memberExternalApp) {
        memberExternalApp.setId(UUIDUtils.generateRandomUUID());
        boolean result = memberExternalAppWriteDao.insert(memberExternalApp);
        if (result){
            return memberExternalApp.getId();
        }
        return null;
    }

    /**
     * 更新
     * @param memberExternalApp 会员第三方应用
     * @return 更新结果(true/false)
     */
    @Override
    public boolean update(MemberExternalApp memberExternalApp) {
        return memberExternalAppWriteDao.update(memberExternalApp);
    }

    /**
     * 逻辑删除
     * @param id 实体主键
     * @return 删除结果(true/false)
     */
    @Override
    public boolean deleteLogic(@NotNull String id) {
        if (Strings.isNullOrEmpty(id)){
            return false;
        }
        return memberExternalAppWriteDao.deleteLogic(id);
    }

    /**
     * 物理删除
     * @param id 实体主键
     * @return 删除结果（true/false）
     */
    @Override
    public boolean delete(@NotNull String id) {
        if (Strings.isNullOrEmpty(id)){
            return false;
        }
        return memberExternalAppWriteDao.delete(id);
    }

    /**
     * 批量逻辑删除
     * @param ids 主键集合
     * @return 删除结果(true/false)
     */
    @Override
    public boolean batchDeleteLogic(@NotNull Set<String> ids) {
        if (CollectionUtils.isEmpty(ids)){
            return false;
        }
        return memberExternalAppWriteDao.batchDeleteLogic(ids);
    }

    /**
     * 批量物理删除
     * @param ids 主键集合
     * @return 删除结果（true/false）
     */
    @Override
    public boolean batchDelete(@NotNull Set<String> ids) {
        if (CollectionUtils.isEmpty(ids)){
            return false;
        }
        return memberExternalAppWriteDao.batchDelete(ids);
    }

    /**
     * 获取
     * @param id 主键
     * @return 会员第三方应用
     */
    @Override
    public MemberExternalApp get(String id) {
        return memberExternalAppReadDao.get(id);
    }

    /**
     * 根据会员和配置类型查询
     *
     * @param memberId 会员编号
     * @param deployType 配置类型
     * @return 第三方应用关系
     */
    @Override
    public MemberExternalApp findByMemberIdAndDeployType(String memberId, Integer deployType) {
        return memberExternalAppReadDao.findByMemberIdAndDeployType(memberId, deployType);
    }

    /**
     * 获取或者设置
     *
     * @param memberId 会员编号
     * @param deployType 配置类型
     * @return 第三方应用关系
     */
    @Override
    public MemberExternalApp getSet(String memberId, Integer deployType) {
        MemberExternalApp memberExternalApp = this.findByMemberIdAndDeployType(memberId, deployType);
        if (null == memberExternalApp){
            memberExternalApp = new MemberExternalApp();
            memberExternalApp.setMemberId(memberId);
            memberExternalApp.setDeployType(deployType);
            this.insert(memberExternalApp);
        }
        return memberExternalApp;
    }

    /**
     * 分页查询会员第三方应用
     * @param memberExternalApp 会员第三方应用
     * @param page 分页信息
     * @return 会员第三方应用列表
     */
    @Override
    public List<MemberExternalApp> listPage(MemberExternalApp memberExternalApp, Page page) {
        return memberExternalAppReadDao.listPage(memberExternalApp, page);
    }

    /**
     * 所有会员第三方应用
     * @param memberExternalApp 会员第三方应用
     * @return 会员第三方应用列表
     */
    @Override
    public List<MemberExternalApp> list(MemberExternalApp memberExternalApp) {
        return memberExternalAppReadDao.listPage(memberExternalApp, null);
    }

    @Override
    public List<MemberExternalApp> batchList(@NotNull Set<String> ids, MemberExternalApp memberExternalApp, Page page) {
        return null;
    }

    /**
     * 根据 appid 和 填写配置查询
     *
     * @param appid appid
     * @param deployType 填写类型
     * @return 第三方应用
     */
    @Override
    public MemberExternalApp findByAppidAndDeployType(String appid, Integer deployType) {
        return memberExternalAppReadDao.findByAppidAndDeployType(appid, deployType);
    }
}
